
    <html lang="zh-cn">
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type" />
    <link href="F:\v_awjliu\BKDocs\ZH/default.css" rel="stylesheet">
    </head>
    <body>
    <h1 id="_1">产品简介</h1>
<p>故障自愈是行业领先的“故障自动化处理”解决方案，提升企业的服务可用性和降低故障处理的人力投入，实现故障自愈从“人工处理”到“无人值守”的变革!</p>
<p>{% video %}media/fta_brand_video.mp4{% endvideo %}</p>
<p>通过自动化处理节省人力投入，通过预定的恢复流程让恢复过程更可靠，通过并行分析达到更快的故障定位和恢复。</p>
<p>一句话概括：实时发现告警，预诊断分析，自动恢复故障，并打通周边系统实现整个流程的闭环。</p>
<h1 id="_2">问题反馈</h1>
<ul>
<li>
<p><strong>QQ</strong>：<a href="http://wpa.b.qq.com/cgi/wpa.php?ln=1&amp;key=XzgwMDgwMjAwMV80NDMwOTZfODAwODAyMDAxXzJf">800802001</a></p>
</li>
<li>
<p><strong>邮件</strong>：contactus_bk@tencent.com</p>
</li>
<li>
<p><strong><a href="http://bk.tencent.com/s-mart/community/ask">我给故障自愈提需求</a></strong></p>
</li>
</ul><h1 id="_1">特点及优势</h1>
<p><img alt="core-function" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/core-function.png" /></p>
<ol>
<li><strong>集成主流监控产品</strong>：告警源集成蓝鲸监控、4 款主流开源监控产品 Zabbix、Open-Falcon、Nagios、Icinga，及 AWS、邮件的告警接入，更能通过 REST API 拉取、推送告警。</li>
<li><strong>丰富的处理套餐</strong>：除支持作业平台、标准运维外，还支持快捷套餐类(磁盘清理、汇总、检测 CPU 使用率 TOP10 等)、组合套餐类(获取故障机备机、通知、审批等)。</li>
<li><strong>告警收敛和防御</strong>：系统预定收敛和防御规则，对异常告警事件进行收敛，更能通过收敛审批功能对异常的执行做审批。</li>
<li><strong>组合套餐</strong>：把自定义自愈套餐通过 FTA(故障树分析)处理流程，组装成解决复杂场景的组合套餐。</li>
<li><strong>健康诊断</strong>：根据系统内置的健康诊断策略，周期性回溯异常事件，并通过邮件方式推送出来。</li>
<li><strong>预警自愈</strong>：是健康诊断功能的延伸，把健康诊断发现的问题通过自愈方案解决，完成异常事件的闭环。</li>
<li><strong>操作审计</strong>：感知故障自愈的每一次改动，确保运营安全，问题可回溯。</li>
</ol>
<h2 id="_2">引领行业故障处理新潮流</h2>
<p><strong>故障自愈重新定义故障处理流程</strong>，在运维领域系较早提出故障自动化理念并落地为产品。</p>
<p><img alt="lead-trend" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/lead-trend.png" /></p>
<h2 id="_3">事件处理流程引擎，实现无人值守自愈</h2>
<p>获取监控告警发现异常，预诊断分析，调用预定义的处理流程，实现 <strong>故障无干预自动处理</strong>。</p>
<p><img alt="enginee" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/enginee.png" /></p>
<h2 id="mttr">为企业节省人力及降低 MTTR</h2>
<p>故障自愈通过自动化的故障处理流程，<strong>节省运维处理故障的人力成本</strong>。让运维把工作专注到企业服务的用户体验优化、数据分析，而不只是基础运维服务。</p>
<p>自动化的故障处理流程，减少人工处理环节耗费的时间，降低故障处理时长。实现故障的无人值守，让故障处理不再依赖于人，<strong>提升企业 IT 服务的可用性</strong>。</p>
<p><img alt="reduce_mtt" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/reduce_mttr.png" /></p><h1 id="_1">术语解释</h1>
<h2 id="_2">自愈套餐</h2>
<p>故障自愈收到告警后，执行的动作，比如作业套餐。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15372664572577.jpg" /></p>
<h2 id="_3">自愈方案</h2>
<p>“关联告警”和“自愈套餐”的策略。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/fta001.png" /></p><h1 id="_1">产品架构图</h1>
<p>故障自愈集成行业主流开源监控产品或以 REST API 方式获取企业监控产品的告警，<strong>匹配告警设置的自愈套餐</strong>，同时通过 <strong>收敛防御</strong> 实现 <strong>在安全的前提下完成告警处理的<a href="https://mp.weixin.qq.com/s/MX74-vDEOkFA0Om6WDrwYQ">无人值守</a></strong>。</p>
<h2 id="_2">故障自愈在蓝鲸中的位置</h2>
<p>在蓝鲸的体系架构中，故障自愈位于 <strong>应用场景 SaaS 层</strong>，通过蓝鲸 PaaS 平台的 ESB(API 网关)调用 配置平台(CMDB)、作业平台、标准运维等产品的 API，实现告警的自动化处理。</p>
<p><img alt="故障自愈在蓝鲸中的位置" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/故障自愈在蓝鲸中的位置.png" /></p>
<h2 id="_3">故障自愈产品架构图</h2>
<p>故障自愈的告警拉取模块，周期性或通过 <strong>回调</strong> 方式从各大监控系统中获取告警，通过调用蓝鲸 CMDB 的 API <strong>解析</strong> 告警所属的业务、模块，查询该业务、模块在故障自愈配置的处理动作，经过 <strong>告警收敛</strong> 模块的过滤以确认没有大批量相同属性(如同业务、机房等)，最后执行对应的 <strong>处理动作</strong>，告警恢复，业务恢复正常。</p>
<p><img alt="architecture" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/architecture-1.png" /></p>
<p>为了便于理解，下图为欢乐游戏业务的接入层、存储层发生磁盘使用率告警的自动化处理示意图。</p>
<p><img alt="-w1586" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681703490482.jpg" /></p>
<p>将 <strong>人的处理经验沉淀到自动化工具</strong> 上，故障自愈，重新定义告警的处理方式！</p>
<p><img alt="-w1480" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681705050315.jpg" /></p><h1 id="_1">设计理念</h1>
<blockquote>
<p>以产品设计理念剖析企业建设故障自动化处理方案的思路。</p>
</blockquote>
<p>人工处理告警，一直是运维心中的痛。大年初一拜年、结婚、和老婆孩子外出过周末等美好时光，作为运维的你，好像一直心系 IT 系统，保持与笔记本的安全距离。</p>
<p>为什么这么多年过去了，还是这么苦逼，不是说运维行业转 AIOps 了，我竟然还在手工处理告警，我该怎么办？</p>
<p>本文介绍故障自愈攻克的 3 个技术点，以及 <strong>献上开箱即用的方案</strong>。</p>
<h2 id="_2">基本流程</h2>
<p>自动化的要点是什么？<strong>把人的经验抽象、固化为程序处理</strong>，工业(第 3 次工业革命)或互联网都是如此。</p>
<p>举个例子，磁盘出现告警，运维首先想到的是登陆服务器清理磁盘。</p>
<p><img alt="-w486" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/人工处理故障.jpg" /></p>
<p>接下来，我们拆解背后的逻辑。</p>
<h3 id="_3">抽象告警处理流程</h3>
<ul>
<li>拉取磁盘告警</li>
<li>编写磁盘清理的脚本或作业任务</li>
<li>设计关联模块：<strong>把拉取到的磁盘告警，与调用脚本的模块串起来</strong></li>
</ul>
<p>流程图如下：</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15258541375579.jpg" /></p>
<h3 id="cmdb">通过 CMDB 做资源清洗</h3>
<p>不同模块的磁盘清理方案不一样，如何解决呢？</p>
<p>这时需要 <strong>引入 CMDB(设备、人、业务的映射关系)</strong>，通过 CMDB 把 <code>IP</code> 清洗为 <code>模块</code>，这样就解决了接入层 和 逻辑层、存储层的 <strong>告警使用对应的磁盘清理方案</strong>。</p>
<p>流程图如下：</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15258758921030.jpg" /></p>
<h3 id="_4">对接企业内部网关</h3>
<p>故障自愈可能会处理失败，这时需要通知用户。故障自愈的处理方式除了调用作业外，还可能需要<strong>调用企业内部的网关</strong>，比如服务器重启、申请服务器等。</p>
<p>使用 PaaS 层的 ESB 是一种解决思路，通过 ESB 封装企业内部网关，解决权限校验、频率控制、访问统计、路由分发以及自助接入等功能，不要直接调用裸接口了。</p>
<p>下图为故障自愈调用邮件和微信通知网关：</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259298974386.jpg" /></p>
<p>经过这一轮的探索，故障自动处理的流程如下：</p>
<p><img alt="-w841" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681876961325.jpg" /></p>
<h3 id="_5">对接企业内部监控产品</h3>
<p>以 Zabbix、Open-Falcon 为例，介绍如何对接企业内部的监控产品。</p>
<p><img alt="-w501" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259239221282.jpg" /></p>
<h4 id="zabbix">对接 Zabbix</h4>
<p><a href="https://mp.weixin.qq.com/s/kZzLv2QOQvtX7Bim5n-NJQ">《当 Zabbix 遇见故障自愈》</a> 介绍了拉取 Zabbix 告警的方案，<strong>通过 ActionScript 调用脚本，把 Zabbix 告警推送至自愈的告警拉取模块</strong>。</p>
<p>推送(或叫回调)可以保证告警拉取的实时性。</p>
<p>下图为 Zabbix 推送告警示例：</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259220015727.jpg" /></p>
<p>实际上是 Zabbix 调用推送告警的脚本：</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259220758436.jpg" /></p>
<p>对接 Zabbix 的落地案例可以参考陈亮撰写的 <a href="https://mp.weixin.qq.com/s/MX74-vDEOkFA0Om6WDrwYQ">那些年我们想做的无人值守</a>。</p>
<p>除 Zabbix 外，Open-Falcon 在国内的社区热度也不错，所以也介绍拉取其告警的方案。</p>
<h4 id="open-falcon">对接 Open-falcon</h4>
<p>方案类似 Zabbix，不过 Open-falcon 直接提供了 callback 功能，简化了流程。</p>
<p>下图为在 Open-Falcon 告警模板中，将故障自愈接收告警的地址，<strong>录入至 Callback 地址</strong>中。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259229587200.jpg" /></p>
<p>收到了 Open-Falcon 推送的告警后，解析对应的字段即可。</p>
<p>如果企业内部的 CMDB 以 IP 来标识主机，需要再做一层转换，因为 Open-Falcon 的资源标识 <code>endpoint</code> 默认是主机名，那么就需要使用 CMDB 的自动发现功能自动上报主机名，同时提供把主机名清洗为 IP 的功能。</p>
<p>下面是 Nginx 模块磁盘告警的自愈示例，匹配 Nginx 模块的磁盘清理套餐，清理 Nginx 模块的日志文件，整个过程不到 30 秒。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259231536432.jpg" /></p>
<p>告警自动处理看似如此简单，然而并非如此。</p>
<h2 id="_6">两面性</h2>
<p><strong>故障自动处理就像一把刀，有其两面性</strong>。</p>
<p>因为要确保告警的真实性，一旦把假告警也自动处理了，就很悲催了。</p>
<p>举个例子。网络波动，批量出现 PING 告警。实际上服务器运行正常，这时你把服务器都重启了，那就 GG 了。</p>
<p>如何解决呢？分析事物的规律。</p>
<p>批量出现告警，那可以在告警拉取模块后面，<strong>增加一个收敛模块</strong>：</p>
<ul>
<li>
<p>比如，在 X 时间内出现 Y 个告警，打电话给运维审批。</p>
</li>
<li>
<p>X 时间内同一主机出现使用相同套餐的告警，则收敛时间窗口中后面的告警则跳过，比如同时收到进程告警 和  端口告警，就不用拉 2 次进程了。</p>
</li>
</ul>
<p>还有就是，原有监控系统没有收敛能力，那么可以借用这个功能来做告警汇总，因为收敛逻辑一样，只是收敛的处理方式有差异。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259261288161.jpg" /></p>
<p>解决了安全和基本的告警自动处理诉求后，你可能还想处理复杂的故障处理场景。</p>
<h2 id="-">复杂告警的处理方案 - 组合套餐</h2>
<p>举个例子，A 模块是重要模块，出现 PING 不可达告警，首先要校验 A 模块是否真的故障，如果真的故障，接下来是从资源池中获取备机 ...  故障替换等等，期间每个环节都有可能出错，那就要考虑异常分支的场景。</p>
<p><strong>树结构</strong>可以解决该问题，<strong>二叉树</strong>足以满足大部分场景(成功、失败两种分支)。</p>
<p><img alt="故障自愈_二叉树" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/%E6%95%85%E9%9A%9C%E8%87%AA%E6%84%88_%E4%BA%8C%E5%8F%89%E6%A0%91.png" /></p>
<p>上面这张图，是一个自愈处理方案，可以称之为组合套餐。</p>
<p>这里同时引入了原子的概念，通过组装原子来满足各种需求场景， 和<code>资源编排</code>说的是同一个理儿。</p>
<p>注：如果你想使用三叉树，其实可以把组合套餐也作为一个原子套餐(节点)。</p>
<h2 id="_7">技术架构</h2>
<p>经过前面对 <strong>故障自愈的处理流程</strong>、<strong>故障自愈的两面性</strong>、<strong>复杂的故障处理方案</strong> 的层层梳理，我们有了一张故障自愈的技术架构图。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15258544840664.jpg" /></p>
<p>故障自愈的告警拉取模块，周期性或通过 <strong>回调</strong> 方式从各大监控系统中获取告警，通过调用蓝鲸 CMDB 的 API <strong>解析</strong> 告警所属的业务、模块，查询该业务、模块在故障自愈配置的处理动作，经过 <strong>告警收敛</strong> 模块的过滤以确认没有大批量相同属性(如同业务、机房等)，最后执行对应的 <strong>处理动作</strong>，告警恢复，业务恢复正常。</p>
<p>相信这次以经行业验证的故障自愈做技术剖析，能对大家建设企业内部的故障自动处理方案提供参考思路。</p><h1 id="_1">入门指南</h1>
<p><img alt="Getting_started" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/Getting_started.png" />
<center>图 1. 快速接入故障自愈</center></p>
<p><img alt="fta_trave" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/fta_travel.png" />
<center>图 2. 自愈之旅</center></p><h2 id="_1">故障自愈的权限</h2>
<p>在蓝鲸平台接入权限中心前，故障自愈以 CMDB 的业务角色和超级管理员来进行权限控制，后台运行也是以业务运维角色来进行套餐的执行。</p>
<p>简单来说：故障自愈的人员来自配置平台中该业务的运维，开发，测试，产品角色。运维有操作权限，其他的是查看权限。</p>
<h2 id="_2">权限中心带来的使用变化</h2>
<p>使用上还是以配置平台的运维角色为准。 但是其他周边系统的权限由其他系统的权限决定。</p>
<h3 id="_3">作业平台的使用</h3>
<p>故障自愈的的快捷套餐和配置的 job 作业套餐会涉及作业平台的执行，作业平台 V1 的接口没有兼容原有的业务角色权限，故障自愈的套餐执行会以当前业务运维的身份执行，因此也需要去权限中心申请相应的权限。</p>
<h3 id="_4">标准运维的使用</h3>
<p>由于故障自愈没有接入权限中心，故障自愈是以业务为维度展示和执行，标准运维在权限中心版本新增了的项目的功能，仅支持从配置平台同步过来的业务项目可以使用，但是通过标准运维新增的项目，在故障自愈无法是使用的。</p><h1 id="_1">快速接入三部曲</h1>
<p>磁盘使用率告警的自动化是一个经典的场景，本文通过这个该案例快速介绍故障自愈的基本使用。 </p>
<h2 id="_2">第一步： 接入数据源</h2>
<p>接入告警数据源 【接入自愈】 → 【管理告警源】  → 开启/刷新</p>
<p>只有自愈平台的管理员可以进行数据源的开启动作，运维可以进行刷新告警类型操作。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/quickstart/media/16052431658712.jpg" /></p>
<h2 id="_3">第二步： 创建磁盘清理自愈套餐</h2>
<p>磁盘告警来了，执行什么动作来清理磁盘。</p>
<p>{% video %}1.1_fta_create_fta_solutions_disk.mp4{% endvideo %}</p>
<p><strong>接入流程</strong>：</p>
<p>依次选择 【接入自愈】 → 【套餐管理】  → 【创建自愈套餐】</p>
<p>按照 【磁盘清理(适用于 Linux)】套餐页面的提示，输入【套餐命名】、【磁盘清理的目录】，选【删除多少天的文件】和【待删除文件名描述】，然后保存自愈套餐即可。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14954426910835.jpg" /></p>
<blockquote>
<p>提示：该套餐实现出现磁盘使用率告警时，找出 <code>/data/log/</code> 目录下 <code>3天前</code> 以 <code>.log</code> 结尾的文件并删除。</p>
</blockquote>
<p>接下来我们需要把 <code>磁盘使用率</code> 告警接入刚刚创建的磁盘清理套餐。</p>
<h2 id="_4">第三步：接入磁盘清理自愈方案</h2>
<p>{% video %}1.2_fta_bind_fta_solutions_disk.mp4{% endvideo %}</p>
<p>在【接入自愈】菜单中点击【接入自愈】。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14954963492141.jpg" /></p>
<p>进入【接入自愈】页面，做如下配置：</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955044310872.jpg" /></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955045422350.jpg" /></p>
<p>如此，完成磁盘清理告警接入故障自愈。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955041094397.jpg" /></p><h1 id="_1">进程告警</h1>
<p>故障自愈除了能处理单机性能告警外，还能处理服务类的告警，比如进程告警。</p>
<p>比如 Nginx 进程挂掉了，你需要拉起 Nginx 进程。</p>
<p>下面以 Nginx 进程告警接入自愈为例。</p>
<h2 id="nginx">编写拉起 Nginx 进程的作业</h2>
<p>在作业平台编写拉起 Nginx 进程的脚本。</p>
<blockquote>
<p>脚本中除了拉起进程，你还可以考虑增加进程检测的逻辑，保证拉起进程这个过程无误。</p>
</blockquote>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955087013221.jpg" /></p>
<h2 id="nginx_1">创建拉起 Nginx 的自愈套餐</h2>
<p>在【套餐管理】中新建作业平台套餐，选择刚刚在作业平台中创建的【拉起 Nginx】作业。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955086379695.jpg" /></p>
<h2 id="_2">接入自愈</h2>
<p>在【接入自愈】页面将【进程告警】关联 【拉起 Nginx】套餐，自愈范围选中【nginx】模块。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15360456528813.jpg" /></p>
<p>至此，进程告警的自愈处理方案配置完毕。</p>
<p>更多进程告警的配置细节请参考 <a href="../functions/Alarm_Automatic_Processing.md">蓝鲸监控告警自动处理</a>。</p><h1 id="cpu">CPU 使用率告警</h1>
<p>一般出现 CPU 使用率告警后，我们很想知道是哪个进程造成的？</p>
<p>于是，故障自愈内置一个分析 CPU 使用率的快捷套餐 <code>『快捷』发送 CPU 使用率 TOP 10 进程列表(适用于Linux)</code>。</p>
<h2 id="cpu_1">接入 CPU 使用率告警套餐</h2>
<p>选择【接入自愈】菜单，点击【接入自愈】，告警类型选择 “CPU 使用率”，自愈套餐为 “『快捷』发送 CPU 使用率 TOP 10 进程(微信)”</p>
<p><img alt="-w1371" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15682039456603.jpg" /></p>
<h2 id="_1">自愈测试</h2>
<p>在监控系统中产生 CPU 使用率，触发自愈。</p>
<p>下图是一条 CPU 使用率告警的自愈记录，微信消息显示占用 CPU 使用率最高的进程是我们测试的进程 <code>cat</code>。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955961800142.jpg" /></p>
<p>关于 CPU 使用率套餐的技术细节，请参考 <a href="Context_Parameters.md">上下文传参</a>。</p><h1 id="_1">内存使用率告警</h1>
<p>一般出现<code>内存使用率告警</code>后，我们很想知道是哪个进程造成的？</p>
<p>于是，故障自愈内置一个分析内存使用率的快捷套餐<code>『快捷』发送内存使用率 TOP 10 进程列表(微信)</code>。</p>
<h2 id="_2">接入内存使用率告警套餐</h2>
<p>选择【接入自愈】菜单，点击【接入自愈】，告警类型选择 “内存使用率”，自愈套餐为 “『快捷』发送内存使用率 TOP 10 进程(微信)”。</p>
<p><img alt="-w1493" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15682050716956.jpg" /></p>
<h2 id="_3">自愈测试</h2>
<p>在监控系统中产生内存使用率，触发自愈。</p>
<p>下图是一条内存使用率告警的自愈记录，微信消息显示占用内存使用率最高的进程是 <code>AgentWorker</code>。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14956178826478.jpg" /></p>
<p>关于内存使用率套餐的技术细节，请参考 <a href="Context_Parameters.md">上下文传参</a>。</p><h1 id="_1">告警收敛</h1>
<p>我们很有可能收到重复的告警，所以故障自愈推出告警收敛功能。</p>
<p>满足一定规则后，执行对应的收敛方式。</p>
<h2 id="_2">单业务设置</h2>
<p>点击右上角 新建收敛规则，按下图灰色框中内容添加一条规则。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955235563509.jpg" />
<center>图 1. 告警收敛</center></p>
<p>下图中命中了上述最后一条规则(在同一台主机上，5 分钟内出现 3 条以上告警，由于没有进行审批动作，于是 20 分钟后超时了)。
<img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955234725854.jpg" />
<center>图 2. 告警收敛结果</center></p>
<h2 id="_3">设置全局收敛规则</h2>
<p>默认手动添加的收敛规则的生效范围是<code>当前业务</code>，如果希望在全业务下都生效，可以在 Django 后台设置。</p>
<h3 id="_4">任意找一个业务设置收敛规则</h3>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361247747111.jpg" />
<center>图 3. 添加收敛规则</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361248563377.jpg" />
<center>图 4. 收敛规则添加成功</center></p>
<h3 id="django">在 Django 后台修改生效范围</h3>
<p>使用管理员角色访问以下地址：</p>
<p><code>http://${PaaS_URL}/o/bk_fta_solutions/admin/fta_solutions_app/incidentdef/</code></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361248289211.jpg" />
<center>图 5. 在 Django 后台修改生效范围</center></p>
<p>找到刚添加的收敛规则，将其<code>业务编码</code>修改为 0 (即对所有业务生效)。</p>
<p>访问<code>告警收敛</code>可以发现 <code>规则来源</code> 从  <code>当前业务</code> 换成了 <code>系统内置</code></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361248772176.jpg" />
<center>图 6. 收敛规则来源修改成功</center></p>
<h3 id="_5">在不同业务下测试，均生效</h3>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361249206175.jpg" />
<center>图 7. 在 A 业务下测试收敛规则</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361249438388.jpg" />
<center>图 8. 在 B 业务下测试收敛规则</center></p><h1 id="_1">企业微信审批接入流程</h1>
<h2 id="_2">情景</h2>
<p>在故障替换等高危场景中，微信审批功能可以把控风险。</p>
<h2 id="_3">前提条件</h2>
<ul>
<li>
<p>企业微信号一个，<a href="https://work.weixin.qq.com/wework_admin/register_wx?from=wxqy_register">点击注册</a>。</p>
</li>
<li>
<p>蓝鲸故障自愈 APP 已经正常运行。</p>
</li>
<li>
<p>外网域名一个，能代理访问到故障自愈 APP weixin api(可通过 nginx，apache 等)，下面以 mycompany.com 做示例。</p>
</li>
<li>
<p>若是已有企业微信，注意需要企业微信管理员才能进入企业微信后台。</p>
</li>
</ul>
<h2 id="_4">操作步骤</h2>
<ul>
<li>
<ol>
<li>配置企业微信</li>
</ol>
</li>
<li>
<ol>
<li>配置故障自愈</li>
</ol>
</li>
<li>
<ol>
<li>自愈测试</li>
</ol>
</li>
</ul>
<p>微信审批分两种，一种是回复指令审批，适合组合套装中的【通知或审批】套餐，还有一种需要在微信页面审批(通过菜单进入)，适合告警收敛的【异常防御需审批】。这些都需要一个企业微信应用为载体，下面以故障自愈应用为例，指引接入审批流程，相关参数可按照配置自行修改。</p>
<h2 id="_5">配置企业微信</h2>
<h3 id="_6">新建应用</h3>
<ul>
<li>
<p>入口：企业微信后台管理页面 -&gt; 应用中心 -&gt; 自建应用-&gt; 新建应用</p>
</li>
<li>
<p>操作步骤：
点击创建应用，选择消息型应用，上传自己 LOGO，填写应用名称，请根据人员选择可见范围，点击提交完成。</p>
<ul>
<li>名称填写：故障自愈</li>
<li>功能介绍：一套帮助业务全自动的发现告警、分析告警、自动恢复故障的服务。</li>
</ul>
</li>
</ul>
<p>截图示例如下：
<img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/1494574167873.png" /></p>
<p>注意：可见范围，请务必保证审批管理员，业务管理员可见。</p>
<h3 id="_7">配置回调参数</h3>
<p>此模式适用指令回复审批</p>
<ul>
<li>
<p>入口： 应用中心 -&gt; 故障自愈 -&gt; 模式选择|回调模式</p>
</li>
<li>
<p>操作步骤：
在对应栏填写下面的默认值即可</p>
<ul>
<li>URL：http://mycompany.com/o/bk_fta_solutions/wechat/entry/</li>
<li>Token：FTAToken</li>
<li>EncodingAESKey：FTAEncodingAESKeyFTAEncodingAESKey923456781</li>
</ul>
</li>
</ul>
<p>截图示例如下：</p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/1495508733324.png" /></p>
<blockquote>
<p>注意：上面 TOKEN 和 EncodingAESKey 都是默认参数，请在 APP 配置后，务必修改 Token 和 EncodingAESKey</p>
</blockquote>
<h3 id="_8">配置审批菜单</h3>
<p>此模式适合收敛审批。</p>
<ul>
<li>
<p>入口：应用中心  -&gt;  故障自愈  -&gt;  模式选择|回调模式  -&gt;  自定义菜单|设置</p>
</li>
<li>
<p>操作步骤：</p>
<ul>
<li>点击右边+号按钮，输入名称后，事件类型为调整到网页，输入跳转地址完成，</li>
<li>点下右下方保存按钮后，发布即可，菜单会在 5 分钟内生效。</li>
<li>菜单名称：审批列表</li>
<li>跳转链接：http://mycompany.com/o/bk_fta_solutions/wechat/todo/</li>
</ul>
</li>
</ul>
<p>截图示例如下：</p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/1495508805368.png" /></p>
<p>完成后，企业微信接入就完成了， 下一步需要把生成的 token 等配置到自愈 APP 中。</p>
<h2 id="_9">配置故障自愈</h2>
<p>配置完 APP 后，才能发送审批消息，对于一些特殊处理的静态资源路径，API 路径，也需要在这里配置。</p>
<ul>
<li>入口：admin 页面：http://mycompany.com/o/bk_fta_solutions/doc/wechat_config/</li>
<li>
<p>也可以通过后台 admin 页面右上角-&gt;微信审批配置进入。</p>
</li>
<li>
<p>配置页面示例如下：</p>
</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/1495527861556.png" /></p>
<p>下面对每个配置项详解。</p>
<ul>
<li>
<p>微信端地址(外网可访问)：
填写外网能访问的域名，url 到 wechat/结束，如上面的域名应该填写：</p>
<blockquote>
<p>http://mycompany.com/o/bk_fta_solutions/wechat/</p>
</blockquote>
</li>
<li>
<p>微信端静态资源地址(外网可访问)：
默认即可，如果 nginx 做了路径映射，或者使用 CDN，需要填写绝对路径，如：</p>
<blockquote>
<p>/static/wechat/ (默认)
http://mycompany.com/o/bk_fta_solutions/static/wechat/ (绝对路径，适合 nginx 做了路径映射，或者 CDN 场景)</p>
</blockquote>
</li>
<li>
<p>TOKEN 和 EncodingAESKey：
TOKEN 对应第二步中，配置回调参数中的 Token。注意，如果这里修改，在上面配置也需要同步修改
EncodingAESKey 对应第二步中，配置回调参数中的 EncodingAESKey，注意，如果这里修改，上面配置也需要同步修改，长度固定为 43 个字符</p>
</li>
<li>
<p>CorpID 和 Secret 需要在企业号中获取，入口在设置-&gt;权限管理中，如果没有，新建一个管理组即可。</p>
</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/1495527151654.png" /></p>
<ul>
<li>微信消息的 Agent_ID：
Agent_ID 在创建完企业号应用就可以获取到，在应用中心-&gt;故障自愈，进入即可看到</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/1495527228622.png" /></p>
<ul>
<li>审批管理员
审批管理员是一个组超级用户，可以接受到任意审批消息，也可以审批任意的收敛审批。填写对应的名称，以逗号分隔即可。</li>
</ul>
<blockquote>
<p>注意，名称是已经在企业微信注册的用户。</p>
</blockquote>
<h2 id="_10">自愈测试</h2>
<ul>
<li>创建审批套餐</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20181211121143.png" /></p>
<ul>
<li>在接入自愈流程中，告警类型选择 REST 默认分类，这里选择 REST 默认分类是为了方便触发告警，实际使用过程中，请根据自己实际需求选择告警类型。</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20181211123915.png" /></p>
<ul>
<li>触发告警</li>
</ul>
<p>完整流程请参照 <a href="../functions/REST_API_PUSH_Alarm_processing_automation.md">REST API 推送</a>。</p>
<ul>
<li>审批套餐执行详情</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/201812112115.png" /></p>
<p>微信审批，降低高危告警处理的风险。</p><h1 id="ping">带审批 Ping 告警组合套餐接入流程</h1>
<h2 id="_1">情景</h2>
<p>产生 Ping 告警，服务器故障，首先要做故障检查(再次 Ping 一次，或者调用一次)，发送审核通知(包含故障检查的内容)，用户审核即可重启。 (适用保守的传统企业)</p>
<h2 id="_2">前提条件</h2>
<ul>
<li>
<p>需要先配置企业微信，注册链接：<a href="https://work.weixin.qq.com/">企业微信首页</a>，注意：开启微信端口 80443。</p>
</li>
<li>
<p>蓝鲸故障自愈 APP 已经正常运行 创建故障自愈 APP 请参照 <a href="../guide/WeChat_approval_access_process.md">微信审批接入流程</a>。</p>
</li>
</ul>
<h2 id="_3">准备好组合套餐中每个原子(节点)的套餐</h2>
<h3 id="ping_1">配置 Ping 检测的原子套餐</h3>
<p>在作业平台写个简单的 Ping 检测脚本，再去故障自愈中配置 Ping 检测的自愈套餐。</p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115071752.png" /></p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115070423.png" /></p>
<h3 id="ping_2">Ping 检测没有异常，则发送正常通知</h3>
<p>如 Ping 检测异常，则发送审批通知，用户审批通过即可重启，审批如果不通过，则发送审批失败通知。</p>
<ul>
<li>配置 Ping 检测正常通知</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190109203901.png" /></p>
<ul>
<li>配置审批套餐</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190109204839.png" /></p>
<ul>
<li>配置重启套餐，因为是简单模拟，所以只是 echo 了一下重启成功，实际应用时要调用在 ESB 上注册重启服务器接口(物理机)，如果是虚拟机，需要自己写脚本来调用虚拟机的接口</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115065634.png" /></p>
<h2 id="_4">配置组合套餐，并接入故障自愈</h2>
<p>接入故障自愈这里选择 REST 默认分类是为了方便触发告警，实际应用选择 Ping 不可达告警类型。</p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190109195936.png" />
<center>(Ping 告警组合套餐)</center></p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190109212223.png" />
<center>(接入自愈)</center></p>
<h2 id="_5">触发告警，完成自愈</h2>
<h3 id="_6">触发告警</h3>
<p>由于这里是做测试，就不拿生产环境了，用 REST API 可以更方便的产生告警，完整流程请参照 <a href="../functions/REST_API_PUSH_Alarm_processing_automation.md">REST API 推送</a>。</p>
<h3 id="_7">审核</h3>
<p>Ping 检测没有异常，则发送正常通知。如 Ping 检测异常，则发送审批通知，用户审批通过即可重启，审批如果不通过，则发送审批失败通知。</p>
<ul>
<li>Ping 检测异常，发送审批通知，用户审批通过即可重启</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115064522.png" />
<img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115065951.png" />
<img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115072527.png" /></p>
<ul>
<li>回到故障自愈中，查看自愈详情</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190109215717.png" /></p><h1 id="_1">组合套餐在故障替换场景中的应用</h1>
<h2 id="_2">情景</h2>
<p>场景：A 模块是重要模块，出现 Ping 不可达告警，首先要校验 A 模块是否真的故障，如果真的故障，接下来是从资源池中获取备机 ... 故障替换等等，期间每个环节都有可能出错，那就要考虑异常分支的场景。</p>
<h2 id="_3">前提条件</h2>
<ul>
<li>
<p>需要先配置企业微信，注册链接：<a href="https://work.weixin.qq.com/">企业微信首页</a> ，注意：开启微信端口 80443</p>
</li>
<li>
<p>蓝鲸故障自愈 APP 已经正常运行 创建故障自愈 APP 请参照 <a href="../guide/WeChat_approval_access_process.md">微信审批接入流程</a>。</p>
</li>
</ul>
<h2 id="_4">准备好组合套餐中每个原子(节点)的套餐</h2>
<h3 id="ping">配置 Ping 检测的原子套餐</h3>
<p>在作业平台写个简单的 Ping 检测脚本，再去故障自愈中配置 Ping 检测的自愈套餐。</p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115071752.png" /></p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115070423.png" /></p>
<h3 id="_5">通知和获取备机</h3>
<p>Ping 检测没有异常，则发送正常通知。如 Ping 检测异常，则使用获取备机套餐，自动获取备机，前提是空闲机池中有空闲机。</p>
<ul>
<li>配置 Ping 检测正常通知</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190109203901.png" /></p>
<ul>
<li>配置自动获取备机套餐</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115143958.png" /></p>
<h3 id="_6">拷贝故障机属性到备机</h3>
<p>成功获取备机后，拷贝故障机属性到备机，后续处理对象故障机与备机互换，然后初始化业务，启动进程通知故障替换成功，以上步骤失败都加一个失败通知</p>
<ul>
<li>『快捷』CC 拷贝故障机属性到备机、『快捷』后续处理对象故障机与备机互换，都是快捷套餐，只要选择就好，这里就不展开了。后面初始化业务请根据企业的初始化流程来配置初始化套餐，启动进程也是一样，因为这里只是模拟所以仅用通知代替。</li>
</ul>
<h2 id="_7">配置组合套餐，并接入故障自愈</h2>
<p>接入故障自愈这里选择 REST 默认分类是为了方便触发告警，实际应用选择 Ping 不可达告警类型。
<img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115150414.png" /></p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115150843.png" /></p>
<h2 id="_8">触发告警，完成自愈</h2>
<ul>
<li>
<p>触发告警，由于这里是做测试，就不拿生产环境了，用 REST API 可以更方便的产生告警，完整流程请参照<a href="../functions/REST_API_PUSH_Alarm_processing_automation.md">REST API 推送</a>。</p>
</li>
<li>
<p>回到故障自愈中，查看自愈详情，也可以点击状态，查看执行详情</p>
</li>
</ul>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115152554.png" /></p>
<p><img alt="Alt text" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/20190115153047.png" /></p><h1 id="_1">上下文传参</h1>
<p>上下文传参一般用于组合套餐中，将上一个节点的输出作为下一个节点的输入。</p>
<blockquote>
<p>目前支持将作业平台套餐的输出作为任意下一个节点(作业平台、通知、标准运维等)的输入。</p>
</blockquote>
<h2 id="_2">使用场景</h2>
<p>故障自愈的默认套餐<code>『快捷』发送CPU使用率TOP10的进程(微信)</code>、<code>『快捷』发送内存使用率TOP10的进程(微信)</code> 实际上是一个使用上下文传参的组合套餐。</p>
<ul>
<li>
<p>第 1 步：创建输出 CPU、内存使用率的 TOP10 的作业</p>
</li>
<li>
<p>第 2 步：创建作业平台套餐</p>
</li>
<li>
<p>第 3 步：创建<code>通知</code>套餐，引用上一步输出的结果，以微信的方式发送出来</p>
</li>
<li>
<p>第 4 步：使用组合套餐，将两个套餐串起来</p>
</li>
</ul>
<h2 id="_3">在作业平台中定义传递的参数</h2>
<p>在作业平台的作业中按照如下格式将传递的参数定义好</p>
<pre class="codehilite"><code class="language-bash">  echo &quot;FTAARGV 变量:值&quot;</code></pre>


<p>以<code>『快捷』发送内存使用率TOP10的进程(微信)</code> 套餐中的第 1 步的脚本为例：</p>
<pre class="codehilite"><code class="language-bash">#!/bin/bash
#         USAGE: ./get_top_proc_mem.sh &lt;cpu|mem&gt; &lt;number&gt;#
#   DESCRIPTION: 输出系统当前占用资源(cpu、内存)最多的TopN进程
#===================================================================
set -o nounset                              # Treat unset variables as an error

fields=&quot;pcpu,pmem,comm&quot;

usage() {
    cat &lt;&lt;EOF
    get_top_proc_in_oneline.sh &lt;cpu|mem&gt; &lt;number of top proc&gt;
EOF
    exit 1
}

join() {
    local IFS=&quot;$1&quot;
    shift; echo &quot;$*&quot;
}

if (( $# &lt; 1 )) || (( $# &gt; 2 )) ; then
    usage
fi

case $1 in
    cpu) sort_field=pcpu ;;
    mem) sort_field=rss ;;
    *) usage ;;
esac

if [[ $# -eq 2 ]]; then
    top_n=$2
else
    top_n=6
fi

return_mem=$(ps -eo &quot;$fields&quot; --sort=-&quot;$sort_field&quot; | head -$(( top_n + 1 )) | awk 'NR==1 { gsub(/%/,&quot;&quot;) } {printf &quot;%s\\n&quot;, $0 }')

echo &quot;FTAARGV return_mem:${return_mem}&quot;</code></pre>


<blockquote>
<p>上面示例中，return_mem 为传递给下一个原子节点的变量，${return_mem}为变量的值。</p>
</blockquote>
<p><img alt="fta_give_argu" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/fta_give_argu.png" />
<center>图 1. 创建输出传参(传递给下一个步骤的参数)的作业</center></p>
<h2 id="_4">创建作业平台套餐</h2>
<p>创建自愈套餐，套餐类型选择作业平台，选择上一步创建的作，并勾选<code>从作业中获取参数</code>
<img alt="-w757" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361165262752.jpg" />
<center>图 2. 创建输出传参(传递给下一个步骤的参数)的套餐</center></p>
<h2 id="_5">创建使用上一步输出参数的套餐</h2>
<p>创建通知套餐或作业平台套餐来使用上一步输出的参数。</p>
<blockquote>
<p>如果你没配置通知套餐，也可以通过作业平台套餐来测试。</p>
</blockquote>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361169576206.jpg" />
<center>图 3. 创建通知套餐，引用上一步输出的参数</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361180934431.jpg" />
<center>图 4. 创建作业，引用作业平台套餐传递的参数</center></p>
<p><img alt="-w754" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361168485235.jpg" />
<center>图 5. 创建作业平台套餐，引用上一步输出的参数</center></p>
<h2 id="_6">创建组合套餐</h2>
<p>通过组合套餐，将输出参数 和 使用参数 的原子套餐串起来。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361170784129.jpg" />
<center>图 6. 创建组合套餐</center></p>
<h2 id="_7">测试</h2>
<p>如果故障自愈不是很方便获取监控的告警，可以使用 <a href="../functions/REST_API_PUSH_Alarm_processing_automation.md">REST API 推送</a> 方式，来验证故障自愈的执行。</p>
<h2 id="_8">作业间传参效果</h2>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361183999000.jpg" />
<center>图 7. 模拟自愈，执行上一步创建的组合套餐(包含上下文传参特性)</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361183753395.jpg" />
<center>图 8. 该自愈的执行详情</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361184242911.jpg" />
<center>图 9. #0 步 输出参数</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361186282518.jpg" />
<center>图 9. #1 步 获取参数</center></p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361187273160.jpg" />
<center>图 10. #2 步 作业执行时传递参数内容</center></p>
<h2 id="_9">作业 + 通知 组合套餐的输出结果</h2>
<p><img alt="-w398" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361193219458.jpg" />
<center>图 11. 作业+通知 组合套餐的输出结果</center></p>
<blockquote>
<p>注：如果参数仅在作业平台中传递，可以使用 <a href="../../../作业平台/产品白皮书/Best-Practices/How-to-pass-params-through-steps.md">作业平台的上下文传参功能</a>。</p>
</blockquote><h1 id="_1">套餐内置变量</h1>
<p>自愈的很多套餐里都需要传入参数，但有些参数是套餐执行时根据故障机信息进行动态获取的。</p>
<p>目前自愈里很多套餐类型都支持了这种变量参数，比如通知审批等。</p>
<h2 id="_2">场景示例</h2>
<p>B 机器是 VMM 的管理端，A 机器是 VMM 中的应用服务器。当 A 机器上发生告警时，可以通过调用 B 机器上管理端的接口来完成自愈</p>
<p><img alt="-w753" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15361199878029.jpg" />
<center>图 1. 套餐中引用变量</center></p>
<h2 id="_3">目前可选的变量有(可能为空)</h2>
<ul>
<li>${ip}：告警的 IP</li>
<li>${raw}：告警的字符内容</li>
<li>${alarm_type}：告警类型</li>
<li>${source_time}：告警时间(格式如 2014-01-01)</li>
<li>${cc_biz_id}：CMDB 的业务 ID</li>
<li>${operator}：业务负责人的第一个</li>
</ul>
<h2 id="cmdb-set">CMDB 主机属性和 SET 属性的变量</h2>
<p>格式为：${cc|属性名字}，如：</p>
<ul>
<li>${cc|OuterIP}：故障主机的外网 IP</li>
<li>${cc|AssetID}：故障主机的固资编号
具体属性名请在 CMDB 上查询。</li>
</ul>
<h2 id="cmdb">CMDB 变量支持五个参数</h2>
<ul>
<li>
<p>all、set、custom、alarm_ci_name、ip_bak</p>
</li>
<li>
<p>all：当有多个参数的时候，将返回通过逗号间隔的字符串。如有多个主机名称的时候</p>
</li>
<li>
<p>${cc|HostName|all}：返回"hostname1,hostname2,hostnameN"，不添加默认返回第一个
set：查询 Set 属性。如</p>
</li>
<li>
<p>${cc|SetName|set}：故障主机的 Set 名称
custom：查询自定义属性。如查询一个名为 IDC 的 Set 属性</p>
</li>
<li>
<p>${cc|IDC|set|custom}</p>
</li>
<li>
<p>alarm_ci_name：指定查询故障机的 CMDB 属性</p>
</li>
<li>
<p>ip_bak：指定查询备机的 CMDB 属性</p>
</li>
</ul>
<p>三个参数能任意组合，如以下两个写法是等价的：</p>
<ul>
<li>${cc|IDC|set|custom|all}</li>
<li>${cc|IDC|all|set|custom}</li>
</ul>
<h2 id="_4">故障机替换时备机</h2>
<p>故障自愈现在有两种获取备机的 IP，通过获取备机套餐在 CC 中寻找符合要求的机器或者通过作业平台脚本来获取。获取到的备机参数为：${bpm_context|ip_bak}</p>
<p>与 IP 有关的变量有三个：</p>
<ul>
<li>
<p>${ip} 当前流程处理的 IP，默认是故障机 IP，可以被替换操作对象的套餐改为备机 IP</p>
</li>
<li>
<p>${bpm_context|ip_bak} 备机 IP</p>
</li>
<li>
<p>${bpm_context|alarm_ci_name} 故障机 IP</p>
</li>
</ul>
<h2 id="_5">常见案例</h2>
<ul>
<li>
<p>1.根据告警传入告警 IP</p>
<ul>
<li>${ip}</li>
</ul>
</li>
<li>
<p>2.根据告警 IP 传入外网 IP</p>
<ul>
<li>${cc|OuterIP}</li>
</ul>
</li>
<li>
<p>3.根据告警 IP 传入自定义主机属性</p>
<ul>
<li>${cc|gametype|custom}</li>
</ul>
</li>
<li>
<p>4.根据告警 IP 传入 set 名称</p>
<ul>
<li>${cc|SetName|set}</li>
</ul>
</li>
<li>
<p>5.根据告警 IP 传入自定义 set 属性</p>
<ul>
<li>${cc|openstate|set|custom}</li>
</ul>
</li>
<li>
<p>6.跟进告警 IP 传入组合属性(如：1 区_虎啸谷)</p>
<ul>
<li>${cc|SetWorldID|set}_\${cc|SetChnName|set}</li>
</ul>
</li>
</ul>
<h2 id="_6">注意事项</h2>
<ul>
<li>注意大小写</li>
</ul><h1 id="_1">收敛规则大全</h1>
<p>介绍自愈目前收敛的几种模式，并用现有的一些通用收敛规则举例说明其用法。 希望收敛规则能满足你各式各样的需求，并且在配置好后，让你会忘了它的存在。</p>
<h2 id="_2">异常防御需审批</h2>
<p>触发规则后，会打电话通知用户，让用户审批决定是否收敛。 如果超时未审批则会收敛跳过，不处理。 如果 30 分钟内发生相同规则的异常防御事件，会被汇集到同一个收敛事件中。</p>
<p>可用于防御大规模告警的异常，如发布未屏蔽，网络问题，机房故障等等。通过人工判断大量的告警是否需要处理。</p>
<ul>
<li>#13 一系列同业务的进程端口告警(可能发布变更未屏蔽):</li>
</ul>
<p>同业务 5 分钟内出现 3 条以上进程端口则认为是异常事件需要审批(默认不开启)。</p>
<ul>
<li>#14 一系列同机房的单机异常告警:</li>
</ul>
<p>同机房 2 分钟内出现 10 条以上的 ping/agent/restart 告警则认为是异常事件需要审批。</p>
<ul>
<li>#15 一系列同业务的单机异常告警:</li>
</ul>
<p>同业务 2 分钟内出现 3 条以上的 ping/agent/restart 告警则认为是异常事件需要审批。</p>
<h2 id="_3">触发通知</h2>
<p>触发规则后，不影响处理，发送通知。</p>
<p>可用于配置阀值告知。</p>
<h2 id="_4">汇集相关事件</h2>
<p>触发规则后，不影响处理，只是把满足收敛规则的告警汇集在一起展示为同一个事件。</p>
<p>在界面上把相关的告警汇集在一起展示，能更好自定义告警间的关联性。</p>
<ul>
<li>#9 掉线可能因为大区内基础告警:</li>
</ul>
<p>对于在线告警，汇总相同大区内的基础告警。</p>
<ul>
<li>#18 归纳同主机的一系列告警:</li>
</ul>
<p>汇总相同主机 5 分钟内出现的告警。</p>
<ul>
<li>#20 归纳同主机的一系列进程端口告警:</li>
</ul>
<p>汇总相同主机 30 分钟内出现的进程端口告警。</p>
<h2 id="_5">收敛后处理</h2>
<p>与其他收敛规则相反。未触发规则时，配置的告警类型不处理。触发规则后，才开始处理。</p>
<p>可以等告警数量超过一定阀值后才处理告警。 或者一定时间内同时出现 A 告警和 B 告警的时候再开始处理。</p>
<h2 id="_6">执行中跳过</h2>
<p>触发规则后，如果有满足规则的其他告警正在自愈，或刚结束自愈 5 分钟，则跳过当前告警。</p>
<p>可用于避免重复处理。</p>
<ul>
<li>#12 Ping/Agent 引发的一系列告警:</li>
</ul>
<p>对于由 ping/agent 告警引发的上层告警，如果 ping/agent 告警在处理中，则收敛。</p>
<h2 id="_7">执行中等待</h2>
<p>触发规则后，如果有满足规则的其他告警正在自愈，则等其他告警自愈完成后再继续处理当前告警。</p>
<p>可用户互斥的告警处理，或有先后顺序依赖的告警处理。</p>
<h2 id="_8">成功后跳过</h2>
<p>触发规则后，如果有满足规则的其他告警自愈成功，则跳过当前告警。失败的话则继续自愈处理。</p>
<p>可用于实现失败重试。</p>
<ul>
<li>#2 一系列单机异常类告警:</li>
</ul>
<p>对于相同主机的[ping 超时，上报超时，系统重启，磁盘只读]告警，5 分钟内出现过且自愈成功则收敛。</p>
<ul>
<li>#5 一系列处理套餐相同的告警:</li>
</ul>
<p>对于相同主机相同处理的告警，5 分钟内出现过且自愈成功则收敛。</p>
<h2 id="_9">成功后跳过，失败时审批</h2>
<p>触发规则后，如果有满足规则的其他告警自愈成功，则跳过当前告警。 失败的话则发送审批由用户判断是否继续执行自愈处理。</p>
<h2 id="_10">超出后汇总</h2>
<p>触发规则后，超出数量的告警将会收敛不处理，并发送汇总通知。</p>
<p>如果告警在一定时间内不断出现，超过某个阀值可以认为其有异常，不再自愈，触发通知。</p><h1 id="_1">告警通知渠道</h1>
<p>故障自愈是蓝鲸 PaaS 上一个 SaaS，通知渠道使用 PaaS 的通知 ESB 组件，在蓝鲸的独立部署版本(企业版、社区版)需要在开发者中心后台设置。</p>
<h2 id="esb">在通知 ESB 组件中配置通知渠道</h2>
<p>在菜单【开发者中心】-&gt; 【API 网关】-&gt; 【通道管理】中，过滤 [CMSI]蓝鲸消息管理，如配置邮件网关，点击【[CMSI]发送邮件】即可。</p>
<p><img alt="-w1357" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681996556287.jpg" /></p>
<p>进入邮件网关的配置页面，按提示完成邮件网关的配置。</p>
<p><img alt="-w1666" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681997001970.jpg" /></p>
<p>更多细节，请参考以下 2 篇文档：</p>
<ul>
<li>
<p><a href="../../../PaaS平台/产品白皮书/场景案例/noticeWay.md">如何配置通知渠道，如邮件、微信、短信等?</a></p>
</li>
<li>
<p><a href="http://bk.tencent.com/s-mart/community/question/95#/">经验分享：测试邮件服务是否正常</a></p>
</li>
</ul>
<h2 id="_2">告警通知效果</h2>
<p>通知渠道有 4 种：微信、电话、邮件、短信，以下为部分通道的通知效果。</p>
<ul>
<li>邮件通知</li>
</ul>
<p><img alt="-w1176" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681994855930.jpg" /></p>
<ul>
<li>微信通知</li>
</ul>
<p><img alt="-w424" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/14955061074598.jpg" /></p><h1 id="_1">用户分享案例</h1>
<h2 id="_2">社区用户分享案例</h2>
<ol>
<li><a href="https://bk.tencent.com/s-mart/community/question/346#/">一次模拟进程宕掉的蓝鲸故障自愈测试分享</a></li>
<li><a href="https://bk.tencent.com/s-mart/community/question/354#/">蓝鲸监控服务拨测测试文档</a></li>
<li><a href="https://mp.weixin.qq.com/s/Du4yhF3kEao35SA9I6lq_Q">【社区案例】组合套餐：在保障业务安全的前提下实现故障处理自动化</a></li>
</ol>
<h2 id="_3">蓝鲸公众号分享案例</h2>
<ol>
<li><a href="https://mp.weixin.qq.com/s/rCPDpxDG5v_BFo1gPRNq3w">某银行的故障自愈落地案例</a></li>
<li><a href="https://mp.weixin.qq.com/s/MX74-vDEOkFA0Om6WDrwYQ">那些年我们想做的无人值守</a></li>
<li><a href="https://mp.weixin.qq.com/s/kZzLv2QOQvtX7Bim5n-NJQ">当 Zabbix 遇见故障自愈</a></li>
<li><a href="https://mp.weixin.qq.com/s/9VSKvfo0_JKSWs6m1wynPg">心得分享-故障自愈：清理最早一天日志分享</a></li>
</ol><h1 id="_1">集成主流监控产品</h1>
<p>告警源集成蓝鲸监控、4 款主流开源监控产品 Zabbix、Open-Falcon、Nagios、Icinga，及 AWS、邮件的告警接入，更能通过 REST API 拉取、推送告警。</p>
<p><img alt="Integrated_Mainstream_Monitoring_Products" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/Integrated_Mainstream_Monitoring_Products.png" /></p>
<p>以下为部分监控产品的故障自愈执行记录：</p>
<ul>
<li>
<p>Zabbix
<img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681843886610.jpg" /></p>
</li>
<li>
<p>蓝鲸监控
<img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681844423639.jpg" /></p>
</li>
<li>
<p>REST API
<img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681844250430.jpg" /></p>
</li>
<li>
<p>Open-Falcon
<img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681843435227.jpg" /></p>
</li>
</ul>
<p>无论是主流的监控产品，还是自研监控产品，故障自愈总能与其对接。</p><h1 id="_1">蓝鲸监控告警自动处理</h1>
<h2 id="_2">情景</h2>
<p>故障处理是运维的职能之一，人工登录服务器处理告警，存在 2 个问题：<code>故障处理效率低</code> 和 <code>操作疏忽时可能影响生产环境</code>，例如删除文件输入绝对路径时，在根目录和日志目录间误敲空格，导致根目录删除。</p>
<p>接下来通过 “<strong>蓝鲸监控的进程告警接入故障自愈</strong>”这个案例 ，来了解故障自愈是如何解决这 2 个痛点。</p>
<h2 id="_3">前提条件</h2>
<ul>
<li><a href="../../../配置平台/产品白皮书/场景案例/CMDB_management_hosts.md">CMDB 如何管理主机</a></li>
<li><a href="../../../配置平台/产品白皮书/场景案例/CMDB_management_process.md">CMDB 如何管理进程</a></li>
</ul>
<p><strong>术语解释</strong></p>
<ul>
<li><strong>自愈套餐</strong>：告警的处理动作，如拉起进程的作业</li>
<li><strong>自愈方案</strong>：关联 告警 和 处理动作的一个组合</li>
</ul>
<h2 id="_4">操作步骤</h2>
<ol>
<li>
<p>启用蓝鲸监控告警源</p>
</li>
<li>
<p>接入自愈方案</p>
</li>
<li>
<p>自愈测试</p>
</li>
</ol>
<h3 id="_5">启用蓝鲸监控告警源</h3>
<p>在菜单 <code>[接入自愈]</code> -&gt; <code>[管理告警源]</code>中，启用<code>蓝鲸监控</code>。</p>
<p><img alt="-w1678" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644862864407.jpg" /></p>
<h3 id="_6">接入自愈方案</h3>
<p>在菜单 [接入自愈] 中，点击 <code>接入自愈</code>，告警类型选择 <code>[主机监控]进程端口</code>，模块选择 <code>存储层</code>，因为不同类型服务器拉起进程的作业不一样。</p>
<p>点击新建<code>自愈套餐</code>的按钮，准备新建拉起进程的作业。</p>
<p><img alt="-w1677" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644864703986.jpg" /></p>
<p>在套餐中，套餐类型选择 <code>作业平台</code>，新建 <code>启动MariaDB的作业</code> 。</p>
<p><img alt="-w1440" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645573643892.jpg" /></p>
<p>点击<code>新建作业的按钮</code>后，跳转至作业平台，在菜单 <code>[作业执行]</code> -&gt; <code>[新建作业]</code> 中，新建如下作业：</p>
<p><img alt="-w1639" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645571501689.jpg" /></p>
<pre class="codehilite"><code class="language-bash"># Check
ps -ef | grep -i mysqld
netstat -ntlp | grep -i 3306

# Start MariaDB
systemctl start mariadb   || job_fail &quot;start mariadb fail&quot;


# Check
ps -ef | grep -i mysqld
netstat -ntlp | grep -i 3306
netstat -ntlp | grep -i 3306 || job_fail &quot;mariadb not listen 3306&quot;

job_success &quot;start mariadb succ&quot;</code></pre>


<p>保存<code>启动MariaDB</code>的套餐后，自动回到接入自愈的页面，保存自愈方案即可。</p>
<p><img alt="-w1670" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644864936415.jpg" /></p>
<p>回到接入自愈列表，在列表中可以找到刚刚创建的自愈方案。</p>
<p><img alt="-w1678" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644865413991.jpg" /></p>
<h3 id="_7">自愈测试</h3>
<p>接下来将停止 MariaDB 进程，来验证是否可以自动启动进程，以恢复 DB 服务。</p>
<pre class="codehilite"><code class="language-bash"># ps -ef | grep -i mysqld
mysql      926     1  0 10:47 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql     1159   926  0 10:47 ?        00:00:09 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root     16763  7429  0 19:40 pts/1    00:00:00 grep --color=auto -i mysqld
# systemctl stop mariadb</code></pre>


<p>稍等片刻，收到蓝鲸监控的进程端口告警。</p>
<p><img alt="-w1441" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645579545088.jpg" /></p>
<p>在故障自愈的自愈详情中，找到了该条告警的自愈记录，耗时 21 秒。</p>
<p><img alt="-w1635" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645579997854.jpg" /></p>
<p>跳转到作业平台的执行历史，可以看到 MariaDB 已经启动成功。</p>
<p><img alt="-w1635" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645580172760.jpg" /></p>
<p>回到监控的事件中心，可以看到 告警已经恢复。</p>
<p><img alt="-w1597" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645606328548.jpg" /></p>
<p><strong>告警自动处理，如此简单</strong>。</p>
<p>以上为主机监控的告警自动化处理，其他类型告警请参考对应文档：<a href="../../../监控平台/产品白皮书/quickstart/README.md">监控平台快速入门</a>。</p>
<p>故障自动处理是把双刃剑，需要考虑因为网络波动等场景导致的假告警，这时可以用到故障自愈的<code>异常防御需审批</code>功能。具体请参照 <a href="../functions/Alarm_Convergence.md">故障自愈的收敛防护</a> 。</p>
<p>故障自愈，在<strong>安全的前提下完成告警的自动化处理</strong>。</p><h1 id="zabbix">Zabbix 告警自动处理</h1>
<h2 id="_1">情景</h2>
<p>故障处理是运维的职能之一，<code>Zabbix</code> 自带 <code>ActionScript</code>虽然可以实现告警自动处理，但存在 2 个问题：<code>无法集中管理自动处理的脚本</code>、<code>没有收敛防护，安全性无法保障</code>。</p>
<p>接下来我们通过将 “<strong>Zabbix 中磁盘使用率（vfs.fs.*）告警接入故障自愈</strong>”这个案例 ，来了解故障自愈是如何解决这 2 个痛点。</p>
<h2 id="_2">前提条件</h2>
<ul>
<li>
<p><a href="../../../配置平台/产品白皮书/场景案例/CMDB_management_hosts.md">CMDB 如何管理主机</a></p>
</li>
<li>
<p>拥有 Zabbix 管理员账号，用于注册 Zabbix Action</p>
</li>
</ul>
<h2 id="_3">术语解释</h2>
<ul>
<li><strong>自愈套餐</strong> ：告警的处理动作，等同于 Zabbix 的 Action；</li>
<li><strong>自愈方案</strong> ：关联 告警 和 处理动作的一个组合；</li>
</ul>
<h2 id="_4">操作步骤</h2>
<ol>
<li>接入 Zabbix 告警源</li>
<li>接入自愈方案</li>
<li>自愈测试</li>
</ol>
<h2 id="_5">视频教程</h2>
<p>{% video %}media/zabbix_fta.mp4{% endvideo %}</p>
<h3 id="zabbix_1">接入 Zabbix 告警源</h3>
<p>在菜单 [接入自愈] -&gt; [管理告警源] 中，点击 <strong>启用</strong> Zabbix。</p>
<p><img alt="-w1423" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15643686738143.jpg" /></p>
<p>跳转到接入流程页面</p>
<p><img alt="-w1487" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644555486013.jpg" /></p>
<p>Zabbix 接入故障自愈的逻辑是，告警产生时，执行<code>Action</code>，将告警推送至故障自愈接收告警的回调接口。</p>
<p>接下来，我们下载并初始化该<code>Action</code>。</p>
<h4 id="_6">下载初始化脚本</h4>
<p>参照上图，进入 Zabbix Action 的目录 <code>/usr/lib/zabbix/alertscripts</code>，下载初始化脚本 <code>zabbix_fta_alarm.py</code>。</p>
<pre class="codehilite"><code class="language-bash">[root@37ae504b6646 alertscripts]# wget 'http://${PaaS_Host}/o/bk_fta_solutions/0/alarm_source/scripts/zabbix_fta_alarm.py?fta_application_id=66fdfe50-3075-49bf-8101-d97386030c9b&amp;fta_application_secret=EfgBbXD25N6870j9nkgf3ns8eOEsH2Sk' -O /usr/lib/zabbix/alertscripts/zabbix_fta_alarm.py --no-check-certificate</code></pre>


<blockquote>
<p>注：请直接复制故障自愈页面的命令，其中包含故障自愈的页面 URL 以及账号信息。</p>
</blockquote>
<h4 id="zabbix_2">初始化 Zabbix 告警配置</h4>
<p>执行初始化 Zabbix 告警配置脚本 <code>zabbix_fta_alarm.py</code>，参数依次为 <code>--init</code>、<code>Zabbiz API URL</code>、<code>Zabbix账号</code>、<code>Zabbix密码</code></p>
<pre class="codehilite"><code class="language-bash">[root@37ae504b6646 alertscripts]# chmod  +x zabbix_fta_alarm.py
[root@37ae504b6646 alertscripts]# ./zabbix_fta_alarm.py --init http://${Zabbix_Host}/api_jsonrpc.php  Admin zabbix
[2019-07-30 10:51:45,374] INFO fta: get auth token: 136b14f3b8fe226bc02bc5eb4dfd7ac6
[2019-07-30 10:51:45,455] INFO fta: action_get success: {u'jsonrpc': u'2.0', u'result': [{u'actionid': u'8'}], u'id': 1}
[2019-07-30 10:51:45,572] INFO fta: action_delete success: {u'jsonrpc': u'2.0', u'result': {u'actionids': [u'8']}, u'id': 1}
[2019-07-30 10:51:45,640] INFO fta: user_get success: {u'jsonrpc': u'2.0', u'result': [{u'userid': u'6'}], u'id': 1}
[2019-07-30 10:51:45,809] INFO fta: user_delete success: {u'jsonrpc': u'2.0', u'result': {u'userids': [u'6']}, u'id': 1}
[2019-07-30 10:51:45,902] INFO fta: mediatype_get success: {u'jsonrpc': u'2.0', u'result': [{u'mediatypeid': u'7'}], u'id': 1}
[2019-07-30 10:51:45,984] INFO fta: mediatype_delete success: {u'jsonrpc': u'2.0', u'result': {u'mediatypeids': [u'7']}, u'id': 1}
[2019-07-30 10:51:46,077] INFO fta: mediatype_create success: {u'jsonrpc': u'2.0', u'result': {u'mediatypeids': [u'8']}, u'id': 1}
[2019-07-30 10:51:46,174] INFO fta: user_create success: {u'jsonrpc': u'2.0', u'result': {u'userids': [u'7']}, u'id': 1}
[2019-07-30 10:51:46,274] INFO fta: action_create success: {u'jsonrpc': u'2.0', u'result': {u'actionids': [9]}, u'id': 1}</code></pre>


<p>该脚本会创建一个名为<code>FTA_Event_Handler</code>的 Media Type，名为 <code>FTA_Act</code> 的 Action，名为 <code>FTA_Mgr</code> 的用户。</p>
<p><img alt="-w1475" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15643875269373.jpg" /></p>
<h3 id="_7">接入自愈方案</h3>
<p>Zabbix 告警源 接入成功后，接下来关联告警 和 告警的处理动作。</p>
<p>将 Zabbix 中磁盘容量告警<strong>关联</strong>一个磁盘清理的<strong>处理动作</strong>。</p>
<p>选择菜单 [接入自愈] -&gt; [接入自愈]，点击<strong>接入自愈</strong></p>
<p><img alt="-w1475" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644567077537.jpg" /></p>
<p>进入<strong>接入自愈</strong>页面，告警类型选择<code>磁盘容量(vfs.fs.*)</code>，自愈套餐点击 <code>+号</code> 新建 磁盘清理自愈套餐。</p>
<p><img alt="-w1408" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644571789970.jpg" /></p>
<p>跳转至磁盘清理的自愈套餐页面。</p>
<p><img alt="-w1415" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644572175064.jpg" /></p>
<p>保存自愈套餐后，自动回到接入自愈页面。添加完自愈方案后，在接入自愈列表页可以找到刚才创建的自愈方案。</p>
<p><img alt="-w1466" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15643924049885.jpg" /></p>
<h3 id="_8">自愈测试</h3>
<p>生成一个大文件，使磁盘剩余空间低于 20%（ Zabbix 中默认设定的 Trigger 是&lt;20% ）</p>
<pre class="codehilite"><code class="language-bash">[root@access_layer_breaking gse]# pwd
/data/logs/gse
[root@access_layer_breaking gse]# touch -d &quot;10 days ago&quot; agent-20190726-00001.log
[root@access_layer_breaking gse]# ll
总用量 3906980
-rw-r--r-- 1 root root 4000000000 7月  20 11:38 agent-20190726-00001.log
-rw-r--r-- 1 root root     196795 7月  26 23:59 agent-20190726-00002.log
-rw-r--r-- 1 root root     194952 7月  27 23:59 agent-20190727-00003.log
-rw-r--r-- 1 root root     198532 7月  28 23:59 agent-20190728-00004.log
-rw-r--r-- 1 root root     142948 7月  29 17:33 agent-20190729-00005.log
[root@access_layer_breaking gse]# dd if=/dev/zero of=4gb.log bs=1GB count=4
记录了4+0 的读入
记录了4+0 的写出
4000000000字节(4.0 GB)已复制，34.0365 秒，118 MB/秒</code></pre>


<p>稍等片刻，收到 Zabbix 邮件告警，以及故障自愈的处理通知。</p>
<p><img alt="-w1306" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644582323388.jpg" /></p>
<p>在故障自愈的 [自愈详情]菜单中也可以找到自愈记录。</p>
<p><img alt="-w1608" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644579656827.jpg" /></p>
<p>可以查看详情执行记录。</p>
<p><img alt="-w1124" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644579889239.jpg" /></p>
<p><img alt="-w1251" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644580199172.jpg" /></p>
<p>从告警产生到处理结束，耗时 30 秒。</p>
<p><strong>告警自动处理，如此简单</strong>，不要再手动登录到服务器上处理告警了。</p>
<h2 id="_9">扩展阅读</h2>
<h3 id="_10">告警收敛确保安全的告警自动处理</h3>
<p>选择菜单 <code>[高级配置]</code> -&gt; <code>[告警收敛]</code>，新增高危告警的收敛规则，比如 Ping 告警。</p>
<p>一般网络波动时，可能触发假的 Ping 告警，这时不能直接重启服务器，可以通过告警收敛，让运维审批。</p>
<p><img alt="-w1501" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644585231679.jpg" /></p>
<p>具体执行记录，请参照 <a href="../functions/Alarm_Convergence.md">故障自愈的收敛防护</a></p>
<h3 id="_11">健康度日报</h3>
<p>如果服务器频繁触发自愈，那么需要去思考本质问题是什么，是磁盘使用率的告警策略不合适，还是主板故障，亦或是程序运行异常。</p>
<p>这时可以使用 预警功能。</p>
<p>我们在做该教程的时候，在同一天触发了 2 条磁盘使用率的自愈记录，所以产生了一条健康诊断记录。</p>
<p><img alt="-w1645" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644587787256.jpg" /></p>
<p>在邮件中也可以找到。</p>
<p><img alt="-w1079" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644581460418.jpg" /></p>
<p>可在菜单 <code>[高级配置]</code> -&gt; <code>[接入预警]</code>中设置。</p><h1 id="rest-api">集成 REST API 推送</h1>
<h2 id="_1">情景</h2>
<p>故障处理是运维的职能之一，人工登录服务器处理告警，存在 2 个问题：<code>故障处理效率低</code> 和 <code>操作疏忽时可能影响生产环境</code>，例如删除文件输入绝对路径时，在根目录和日志目录间误敲空格，导致根目录删除。</p>
<p>前面介绍了 <a href="Bkmonitor_Alarm_processing_automation.md">蓝鲸监控</a>、<a href="Zabbix_Alarm_processing_automation.md">Zabbix</a> 告警的自动处理，接下来通过 “<strong>REST API 告警接入故障自愈</strong>”这个案例 ，来了解故障自愈如何集成第 3 方监控系统。</p>
<h2 id="_2">前提条件</h2>
<ul>
<li><a href="../../../配置平台/产品白皮书/场景案例/CMDB_management_hosts.md">CMDB 如何管理主机</a></li>
</ul>
<h2 id="_3">术语解释</h2>
<ul>
<li><strong>自愈套餐</strong>：告警的处理动作，比如清理日志的作业</li>
<li><strong>自愈方案</strong>：关联告警和处理动作的一个组合</li>
</ul>
<h2 id="_4">操作步骤</h2>
<ol>
<li>启用 REST API(推送)告警源</li>
<li>接入自愈方案</li>
<li>自愈测试</li>
</ol>
<h3 id="rest-api_1">启用 REST API(推送)告警源</h3>
<p>第 3 方监控系统调用 REST API(推送)接口，故障自愈收到告警后立即做自动化处理。</p>
<p><img alt="告警自动处理RESTAPI" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/告警自动处理RESTAPI.png" /></p>
<p>首先，启用告警源。</p>
<p>在菜单 <code>[接入自愈]</code> -&gt; <code>[管理告警源]</code>中，启用<code>REST API(推送)</code>。</p>
<p><img alt="-w1607" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15644897774502.jpg" /></p>
<h3 id="_5">接入自愈方案</h3>
<p>在菜单 [接入自愈] 中，点击 <code>接入自愈</code>，告警类型选择 <code>REST默认分类</code>。</p>
<p>点击新建<code>自愈套餐</code>的按钮，准备一个告警的处理动作。</p>
<p><img alt="-w1462" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645495294643.jpg" /></p>
<p>在自愈套餐页面，套餐类型选择<code>作业平台</code>，点击作业名称右侧的加号，新建一个测试的作业模板。</p>
<p><img alt="-w1467" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645496712334.jpg" /></p>
<p>点击<code>新建作业的按钮</code>后，跳转至作业平台，在菜单 <code>[作业执行]</code> -&gt; <code>[新建作业]</code> 中，新建一个默认的作业即可。</p>
<p><img alt="-w1618" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645586006821.jpg" /></p>
<p>保存<code>REST API测试</code>的自愈套餐后，自动回到接入自愈的页面，保存自愈方案即可。</p>
<p><img alt="-w1632" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645586988459.jpg" /></p>
<p>回到接入自愈列表，在列表中可以找到刚刚创建的自愈方案。</p>
<p><img alt="-w1461" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645497070309.jpg" /></p>
<h3 id="_6">自愈测试</h3>
<p>在 <code>REST API(推送)</code>的告警源管理页面，复制调用实例。</p>
<p><img alt="-w1463" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645498508783.jpg" /></p>
<p>将示例中的 IP 替换给该业务下任意一个 IP，然后贴到终端下执行。</p>
<p><img alt="-w1677" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645500000862.jpg" /></p>
<blockquote>
<p>如果多次调试，请保证<code>source_id</code>唯一(重复会丢弃)，<code>source_time</code>和服务器时间一致(过长会丢弃)。</p>
</blockquote>
<p>在<code>自愈详情</code>页面可以找到自愈记录。</p>
<p><img alt="-w1462" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645500166456.jpg" /></p>
<p>点开<code>状态</code>按钮，可以查看详情。</p>
<p><img alt="-w1096" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645537350395.jpg" /></p>
<p>点击<code>详情</code>中的作业执行 ID，可查看执行的作业。</p>
<p><img alt="-w1469" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15645537631995.jpg" /></p>
<p>至此，一次模拟告警的故障自愈演示完毕。</p>
<p>REST API(推动) 的场景在于，如果你使用的监控系统故障自愈默认未集成，则可以通过回调 REST API 的方式，将告警推送至故障自愈，故障自愈执行对应的处理动作，完成告警的自动处理。</p>
<p>故障自愈，如此简单。</p><h1 id="open-falcon">对接 Open-Falcon</h1>
<p>对接 Open-Falcon 的机制：Open-Falcon 模板中包含 CallBack（回调）功能，在回调地址中填写故障自愈分配给 Open-Falcon 的告警接收地址。</p>
<h2 id="open-falcon_1">对接 Open-Falcon 告警源</h2>
<p>在【接入自愈】下找到【管理告警源】菜单，点击【启用】Open-Falcon 告警源。</p>
<p><img alt="-w1657" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681902257548.jpg" /></p>
<p>可以找到故障自愈为 Open-Falcon 生成的全局回调地址，针对所有业务生效。</p>
<p><img alt="-w1677" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681903602062.jpg" /></p>
<p>将该回调地址录入至 Open-Falcon 告警模板的回调地址中。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259229587200.jpg" /></p>
<p>故障自愈对接完告警源后，接下来 <strong>创建自愈方案</strong> 和 <strong>自愈套餐</strong>。</p>
<h2 id="_1">创建自愈方案</h2>
<p>选择【接入自愈】菜单，点击【接入自愈】，在接入自愈页面选择 Open-Falcon 的告警类型，比如 磁盘容量，在 【自愈套餐】一栏点击【<strong>+</strong>】，新建自愈套餐。</p>
<p><img alt="-w1676" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681915810902.jpg" /></p>
<p>在 【新建自愈套餐】页面，选择清理的磁盘目录、时间以及文件名描述。</p>
<p><img alt="-w1659" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681907187426.jpg" /></p>
<p>点击【保存自愈套餐】，回到接入自愈界面，点击【添加自愈策略】，至此 自愈方案 接入成功。</p>
<p>接下来，在 Open-Falcon 中模拟告警，以触发故障自愈。</p>
<h2 id="open-falcon_2">Open-falcon 告警自动处理</h2>
<p>在 Open-Falcon 中触发告警后，在下图中可以看到接入层模块磁盘告警的自愈示例，匹配 接入层的磁盘清理套餐，清理其日志文件，整个过程不到 30 秒。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15259231536432.jpg" /></p>
<blockquote>
<p>Open-Falcon 的资源标识 <code>endpoint</code> 默认是主机名，于是故障自愈将蓝鲸 CMDB 自动上报的主机名转换为 IP，然后在做匹配、告警自动处理。</p>
</blockquote><h1 id="icinga-2">集成 Icinga 2</h1>
<p>两步完成 Icinga 2 接入自愈。</p>
<h2 id="icinga-2_1">启用 Icinga 2 告警源</h2>
<p>在【管理告警源】菜单中，【启用】Icinga 2 告警源。</p>
<p><img alt="-w1674" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681919200709.jpg" /></p>
<p>参照 Icinga 2 的接入流程，完成告警源的接入。</p>
<p><img alt="-w1679" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681919913830.jpg" /></p>
<h2 id="_1">创建自愈方案</h2>
<p>参照 <a href="Integrated_Openfalcon.md#Add_FTA">对接 Open-falcon</a>，完成自愈的接入。</p><h1 id="nagios">集成 Nagios</h1>
<p>两步完成 Nagios 接入自愈。</p>
<h2 id="nagios_1">启用 Nagios 告警源</h2>
<p>在【管理告警源】菜单中，【启用】Nagios 告警源。</p>
<p><img alt="-w1678" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681924662592.jpg" /></p>
<p>参照 Nagios 的接入流程，完成告警源的接入。</p>
<p><img alt="-w1679" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681925671561.jpg" /></p>
<h2 id="_1">创建自愈方案</h2>
<p>参照 <a href="Integrated_Openfalcon.md#Add_FTA">对接 Open-falcon</a>，完成自愈的接入。</p><h1 id="rest-api">集成 REST API 拉取</h1>
<p>如果企业使用的监控产品故障自愈未集成，可以把监控产品的告警使用 <a href="REST_API_PUSH_Alarm_processing_automation.md">REST API 推送</a> 至故障自愈，或故障自愈定期从监控产品通过 <strong>REST API 拉取</strong> 的方式获取告警。</p>
<p>本文介绍如何周期性拉取监控产品告警。</p>
<h2 id="rest-api_1">启用 REST API 拉取告警源</h2>
<p>在【管理告警源】菜单中，【启用】REST API 拉取 告警源。</p>
<p><img alt="-w1679" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681929342797.jpg" /></p>
<p>参照 REST API 拉取 的接入流程，完成告警源的接入。</p>
<p><img alt="-w1676" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681930099043.jpg" /></p>
<p><img alt="-w1676" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681930877100.jpg" /></p>
<h2 id="_1">创建自愈方案</h2>
<p>参照 <a href="Integrated_Openfalcon.md#Add_FTA">对接 Open-falcon</a>，完成自愈的接入。</p><h1 id="_1">告警自动处理</h1>
<p>将告警接入自愈套餐后，告警将匹配配置的处理套餐自动执行，无需人工干预。</p>
<p>下图为 Zabbix 的磁盘容量告警接入故障自愈。</p>
<p><img alt="-w1677" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681719553163.jpg" /></p>
<p>在 【自愈详情】菜单中，可以找到每一次故障自愈处理的记录。</p>
<p><img alt="-w1675" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681718326095.jpg" /></p>
<p>点击其中一个自愈记录，可以查看到告警处理详情，下图为 Zabbix 的磁盘使用率告警的自愈详情。</p>
<p><img alt="-w1138" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681718905432.jpg" /></p>
<p>下图为 蓝鲸监控进程端口告警的自动化处理记录。</p>
<p><img alt="-w1095" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681719182988.jpg" /></p>
<p>告警自动处理，如此简单！</p><h1 id="_1">告警收敛</h1>
<p>针对满足收敛条件的告警，汇总为一个告警事件，或进行异常防御审批。</p>
<p>下图为集中收到 4 条 REST API 告警，被收敛成 1 条告警的示例。</p>
<p><img alt="-w1657" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681828531513.jpg" /></p>
<p>原因是在 【告警收敛】菜单中针对 REST API 告警设置了 <strong>相同业务</strong> <strong>5 分钟内</strong> 收到  <strong>2 条</strong> 以上的收敛策略。</p>
<p><img alt="-w1658" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681829451279.jpg" /></p>
<p>当然，故障自愈<strong>内置常见的收敛规则</strong>，例如包含几种监控产品的 PING 告警收敛策略，以防因网络波动造成假告警导致服务器真正被重启。</p>
<p>告警收敛，<strong>在保障业务安全的前提下做告警的无人值守</strong>。</p>
<blockquote>
<p>收敛审批是通过企业微信实现，请参考 <a href="../guide/WeChat_approval_access_process.md">微信审批接入流程</a>。</p>
</blockquote><h1 id="_1">健康诊断</h1>
<p>依托于腾讯故障处理的经验，集成常见故障隐患的<strong>专家配置库</strong>，回溯过往发生的告警单据来<strong>提前发现问题</strong>。</p>
<p>每天早上 8 点回溯自愈处理过的告警，处理分析出的潜在风险。下图为 1 天内产生 2 次磁盘容量告警，故障自愈将提示：
- 请检查当前的磁盘清理策略确实是否需要调整
- 确认该模块当前机型的硬盘空间是否合理</p>
<p><img alt="-w1679" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681837362768.jpg" /></p>
<p>除了针对风险的文本建议，还可以在【接入预警】页面配置自动处理的动作。</p>
<p>下图的预警自愈策略为：当 1 个月内同 1 台主机产生了 5 次 Ping 告警，则故障自愈认为该主机存在异常(可能主板、内存故障)，直接将主机在 CMDB 中移到 “故障机”模块。当然，你也可以设置其他处理动作。</p>
<p><img alt="-w1679" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/fta003.png" /></p>
<p>健康诊断，<strong>在告警中提前发现业务隐患</strong>。</p>
<h2 id="1-django">附录 1 ： Django 后台调整健康诊断策略</h2>
<p>用 PaaS 管理员访问 <PaaS_URL>/o/bk_fta_solutions/admin/，进入故障自愈的 Django 后台。</p>
<p><img alt="-w515" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15365852927672.jpg" /></p>
<p>点击 <code>Advice_defs</code> 进入健康诊断策略配置页面，可以看到健康诊断建议，可以依据实际情况修改。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15365853180059.jpg" /></p><h1 id="_1">组合套餐</h1>
<p>依托于故障树分析(FTA : Fault Tree Analysis)理念，将单个原子套餐组装为组合套餐，根据父节点的执行结果(成功还是失败)来确定子节点的执行分支，以解决复杂场景的故障处理和分析。</p>
<p>下图为服务器故障替换的场景案例，将 <strong>人做故障替换的经验沉淀在故障自愈的组合套餐</strong> 中，在保障安全的前提下，高效地完成故障替换。</p>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15681848604808.jpg" /></p>
<p>组合套餐，实现复杂的 <strong>运维故障处理场景</strong>。</p><h1 id="_1">故障自愈套餐大全</h1>
<p>故障自愈套餐主要有三类组合套餐： <strong>快捷套餐</strong>、<strong>周边系统</strong>、<strong>组合套餐</strong>，以下为每个套餐的详细说明。</p>
<h2 id="_2">快捷套餐</h2>
<p>每个业务默认都会有一批可以选择的套餐，用户几乎不需要对其做任何配置可以直接使用。对于这种套餐，我们用称为『快捷』套餐，部分『快捷』套餐只能在组合套餐中选用。</p>
<h3 id="_3">常规快捷套餐</h3>
<h4 id="linux">磁盘清理(适用于 Linux)</h4>
<p>背后对应一个作业平台套餐，调用作业平台内置的一个跨业务作业，执行磁盘清理。</p>
<p>更多请参考 <a href="../quickstart/Create_Diskclear_Fta_Solutions.md">创建磁盘清理自愈套餐和方案</a>。</p>
<h4 id="_4">汇总</h4>
<ul>
<li>
<p>具体操作：根据配置按一定维度收敛后，发送通知给用户。</p>
</li>
<li>
<p>使用场景：对于一些大量出现的告警，如单机性能告警、流量告警等，可以用此套餐收敛后发送通知。</p>
</li>
<li>
<p>参数说明：时间段和告警数必须填一个。</p>
</li>
<li>
<p>按时间段汇总：从收到第一条告警开始计时，到规定时间后结束。</p>
</li>
<li>按告警数汇总：从收到第一条告警开始计数，到规定数量后结束。</li>
<li>少于多少条不通知：选择时间段汇总时，如果到时间后，告警数量少于指定数量，就不发通知。</li>
</ul>
<h4 id="cpu-top10">【快捷】发送 CPU 使用率 TOP10 的进程(微信)</h4>
<p>当产生 CPU 使用率时，调用作业平台的作业，通过微信发送 占用 CPU 的 TOP 10 进程列表，辅助运维分析原因。</p>
<p>该套餐实际是一个组合套餐，第 1 步执行作业，第 2 步通过微信发送第 1 步的结果，更多细节请参考 <a href="../guide/Context_Parameters.md">上下文传参</a> 的介绍。</p>
<h4 id="top10">【快捷】发送内存使用率 TOP10 的进程(微信)</h4>
<p>同上。</p>
<h4 id="cc">【快捷】CC 移到“故障机”模块</h4>
<p>调用蓝鲸配置平台的接口，将故障机移动至当前业务的故障机模块。</p>
<h3 id="_5">组合套餐中的快捷套餐</h3>
<p>该分类下套餐仅能在组合套餐中使用。</p>
<h4 id="_6">【快捷】配置平台拷贝故障机属性到备机</h4>
<blockquote>
<p>(需先调用 获取故障机备机 套餐)</p>
</blockquote>
<ul>
<li>
<p>具体操作：</p>
<ul>
<li>
<p>调用配置平台替换接口，将替换机转移到与故障机相同的模块下(包括属于故障机多个模块的情况)。</p>
</li>
<li>
<p>拷贝故障机的标准属性、自定义属性到替换机。</p>
</li>
</ul>
</li>
<li>
<p>使用场景：故障机切换后拷贝故障机 CC 信息到备机；</p>
</li>
</ul>
<h4 id="_7">【快捷】后续处理对象故障机与备机互换</h4>
<blockquote>
<p>(需先调用 获取故障机备机 套餐)</p>
</blockquote>
<ul>
<li>
<p>具体操作：
调用此套餐后，在组合套餐的后续流程中，操作对象将会替换。流程默认都是对故障机进行操作，调用一次后将会默认对备机进行操作。再调用一次，则恢复原状。</p>
</li>
<li>
<p>使用场景：
例如当获取选定的备机后，想对备机进行初始化操作，那么这时候就要先调用一次此套餐，再调用初始化。初始化后，又想把故障机移动到配置平台的故障机模块，那么就又要调用一次此套餐，然后再调用配置平台移动模块。</p>
</li>
</ul>
<h2 id="_8">周边系统</h2>
<p>故障自愈自身并没有恢复告警的执行能力，而是通过蓝鲸 PaaS 的 ESB 模块调用作业平台、标准运维的能力来实现。</p>
<h3 id="_9">作业平台</h3>
<p>调用蓝鲸作业平台，作业平台脚本需要按照一定规范来。</p>
<ul>
<li>
<p>具体操作：
调用作业平台作业。</p>
</li>
<li>
<p>使用场景：
希望在机器上执行脚本的故障恢复操作，如拉起进程等。</p>
</li>
<li>
<p>参数说明：</p>
<ul>
<li>
<p>通过选择框选择作业平台作业。</p>
</li>
<li>
<p>自定义传入作业平台的参数(不填默认传入故障 IP)。</p>
</li>
<li>
<p>通过作业平台脚本获取自愈变量来在其他套餐中使用。</p>
</li>
</ul>
</li>
</ul>
<h3 id="_10">标准运维流程</h3>
<p>同上，区别在于调用的是标准运维。</p>
<h3 id="http">HTTP 回调</h3>
<p>裸调企业内部的恢复告警的处理接口，如重启服务器，不经过蓝鲸 PaaS 的 ESB。一般不推荐裸调接口。</p>
<h2 id="_11">组合套餐类</h2>
<h3 id="_12">组合套餐</h3>
<p>组合套餐，顾名思义就是把该业务下的套餐和官方通用套餐组合起来使用。</p>
<ul>
<li>
<p>具体操作：按照配置的流程顺序执行套餐。</p>
</li>
<li>
<p>使用场景：当单一的套餐无法满足故障恢复流程时，将套餐串起来用。</p>
</li>
</ul>
<h3 id="_13">获取故障机备机</h3>
<p>根据配置平台的配置属性获取备机许多故障替换操作都依赖于此套餐。</p>
<p>除了通过这个套餐获取备机外，也可以通过作业平台来获取备机，只要使用作业平台套餐获取变量为 ip_bak 的参数即可。</p>
<ul>
<li>
<p>具体操作：根据配置，在配置平台指定的 Set 与 AppModule 中，查找指定属性与故障机相同的机器。将所有符合条件的机器 IP 通过微信让运维审批选择。此后备机 IP 就能通过变量在其他套餐中获取。</p>
</li>
<li>
<p>使用场景：在组合套餐中调用故障替换的操作套餐前必须先调用过此套餐。</p>
</li>
</ul>
<p>更多变量请参考 <a href="../guide/Solutions_Parameters.md">套餐内置变量</a>。</p>
<h3 id="_14">审批</h3>
<ul>
<li>
<p>具体操作：调用不同的接口发送审批(发送微信失败会改为短信，发送短信失败则发微信，邮件通知接口调用失败将不做处理)。</p>
</li>
<li>
<p>使用场景：一般用于组合套餐中；审批，执行服务器故障替换流程时，让运维审批是否执行替换，降低风险。</p>
</li>
</ul>
<h3 id="_15">通知</h3>
<ul>
<li>
<p>具体操作：调用不同的接口发送通知(发送微信失败会改为短信，发送短信失败则发微信，邮件通知接口调用失败将不做处理)。</p>
</li>
<li>
<p>使用场景：一般用于组合套餐中，通知，自定义消息发送到微信等平台。</p>
</li>
</ul>
<h3 id="_16">暂停等待</h3>
<ul>
<li>
<p>具体操作：暂停一定时间。</p>
</li>
<li>
<p>使用场景：重启操作后 Agent 可能还没准备好，可以等待一定时间后再继续后面的流程。</p>
</li>
</ul>
<h3 id="_17">自定义收敛防御</h3>
<ul>
<li>
<p>具体操作：在指定时间内，出现过指定告警数量的相同 IP，相同告警类型，将会收敛次条告警。</p>
</li>
<li>
<p>使用场景：想添加某些异常防御条件的时候，大部分需求故障自愈的收敛功能就能满足。</p>
</li>
</ul><h1 id="app">APP 部署失败</h1>
<h2 id="app_1">测试环境 APP 部署失败</h2>
<p>后台只有正式环境，所以 APP 不支持测试环境部署</p>
<p><img alt="-w960" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15675011122718.jpg" />
<center>图 1. 测试环境部署故障自愈 APP 失败</center></p>
<h2 id="app_2">正式环境 APP 部署失败</h2>
<p>部署后台的时候没有执行初始化数据的步骤：</p>
<p><code>./bkcec initdata fta   //社区版</code></p>
<p><img alt="-w958" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15675011237028.jpg" />
<center>图 2. 正式环境部署故障自愈 APP 失败</center></p><h1 id="_1">查看依赖组件运行状况</h1>
<p>当故障自愈出现异常时，可以访问运行状态页面， 呈现故障自愈自身以及依赖的第 3 方组件的运行状态。</p>
<p><img alt="-w554" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15368425772394.jpg" />
<center>图 1. 故障自愈运行状态入口</center></p>
<blockquote>
<p>或直接访问 URL：https://${PAAS_URL}/o/bk_fta_solutions/healthz/</p>
</blockquote>
<p>以下是运行状态的部分截图
<img alt="-w609" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15368426191818.jpg" />
<center>图 2. 运行状态效果</center></p>
<h2 id="_2">故障自愈异常时运行状态效果</h2>
<p>当故障自愈自身或依赖的第 3 方组件异常时，会在帮助菜单上呈现异常指标(值为 false)的数量。</p>
<p><img alt="-w299" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15368426899865.jpg" />
<center>图 3. 异常时运行状态提示</center></p>
<p>以下是故障自愈依赖的组件异常时的效果
<img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15368427171733.jpg" />
<center>图 4. 异常时运行状态效果</center></p><h1 id="_1">故障自愈是监控系统吗</h1>
<p>故障自愈本身不是监控系统，它获取监控系统的告警，然后执行对应的处理动作，实现故障处理的无人值守。</p>
<p>详细请访问故障自愈的 <a href="../concepts/Product_Architecture.md">产品架构</a>。</p><h1 id="_1">故障自愈依赖哪些周边系统</h1>
<p>故障自愈依赖蓝鲸的<code>配置平台</code>、<code>作业平台</code>，你需要提前在<code>配置平台</code>上创建一个业务，并且把你的服务器录入到配置平台中。</p><h1 id="_1">故障自愈首页指标计算方法</h1>
<p><img alt="-w2020" src="F:\v_awjliu\BKDocs\ZH/6.0/故障自愈/产品白皮书/assets/15373466920247.jpg" /></p>
<ul>
<li>1 和 5，自愈成功次数 和 自愈趋势：每半小时更新一次</li>
<li>2，健康诊断：每天早上 8 点刷新</li>
<li>3，自愈小助手：实时刷新</li>
<li>4，人力节省，单个告警的人力节省：15 分钟减去自愈耗时，此处是最近 30 天内所有自愈成功告警的人力节省之和</li>
</ul>
    </body>
    </html>
    